iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1

本日閱讀進度:第11章 匿名函式、作用域及閉包(485~494頁)

重點摘要:

  1. 函式何時被定義
    函式宣告在處理程式碼的第一階段即被定義,函式運算式要在被求值後才會被定義。

  2. 作用域
    定義於程式碼頂端的函式具有全域作用域(global scope),而定義於另一個函式中的函式具有區域作用域(local scope)。
    以書中的範例來看:

var migrating = true;
var fly = function(num) { // 因定義於程式碼頂端,fly是全域變數
  var sound = "Flying";   // 函式運算式只有在被求值後,fly才會被視為已定義
  function wingFlapper() { // wingFlapper的作用域涵蓋整個fly函式,在fly函式中,被視為已定義
    console.log(sound);
  }
  for (var i = 0; i < num; i++) {
    wingFlapper();
  }
};
function quack(num) {
  var sound = "Quack";
  var quacker = function() { //quacker的作用域涵蓋整個quack函式,但只在被求值後,視為已定義
    console.log(sound);
  };
  for (var i = 0; i < num; i++) {
    quacker();
  }
}
if (migrating) {
  quack(4);
  fly(4);
}
  1. 函式的操作環境
    一樣使用程式碼來說明。
    假設有一段code長這樣:
function whereAreYou() {
  var justAVar = "Just an every day LOCAL"; //所有的區域變數皆會被存入一個操作環境
  function inner() { //每一個函式皆會附接一個操作環境,其中包含了它的作用域所涵蓋的區域變數
    return justAVar;
  }
  return inner;
 }
 var innerFunction = whereAreYou();
 var result = innerFunction();
 console.log(result);

函式包來包去,看得眼睛都快花了@_@

本文同步發表於cichen


上一篇
Day23. 醒醒吧,你根本沒有名字!
下一篇
Day25. I have a 函式,I have a 操作環境,呃!閉包!
系列文
Head First!從頭開始學JS 《深入淺出 JavaScript 程式設計》讀書筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言